package com.kh.pajx.sop.base;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;

import com.opensymphony.xwork2.ModelDriven;

/**
 * ModelDriven形式Action控制器基类
 * @param <T>
 * @author:	azzcsimp
 * @Createdate:	2014年6月19日 下午3:46:37
 */
public class ModelDrivenBaseAction<T> extends BaseAction implements ModelDriven<T> {
	
	private static final long serialVersionUID = -7800040918641811683L;
	
	protected T model;
	
	/**
	 * 使用反射机制得到model类型，并声称model实例
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:58:01
	 */
	public ModelDrivenBaseAction() {
		try {
			// 通过反射获取model的真实类型
			ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
			Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
			// 通过反射创建model的实例
			model = clazz.newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 校验属性是否存在对象
	 * @param fieldName
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年12月25日 下午3:43:31
	 */
	public boolean exists(String fieldName){
		boolean exists = false;
		try {
			Field[] fields = model.getClass().getDeclaredFields();
			for (int i = 0; i < fields.length; i++) {
			    if(fields[i].getName().equals(fieldName)){
			    	exists = true;
			        break;
			    }
			}
		} catch (Exception e) {
			exists = false;
		}
		return exists;
	}

	@Override
	public T getModel() {
		return model;
	}

}
